
/* 
    从数组中，根据index值来修改交换两组数据的位置；
*/
function UpSchool(arr,upOrDown,itemDetail,type){
    let index
    if(type == "school"){
      index = arr.findIndex(function(item) {
          return item.id === itemDetail.id;
      })
    }else{
      let currenMajorName = itemDetail.remarks
            ? itemDetail.name
            : itemDetail.name + itemDetail.remarks + "";
      index = arr.findIndex(function(item) {
          let nowName = item.remarks
            ? item.name
            : item.name + item.remarks + "";
          return nowName === currenMajorName;
      })
    }
      if(upOrDown == "up"){
        if(index!= 0){
          let temp0 = JSON.parse(JSON.stringify(arr[index]))
          let temp1 = JSON.parse(JSON.stringify(arr[index-1])); 
          arr[index] = temp1;
          arr[index-1] = temp0;
        }else{
            console.log("到顶了")
        }
      }else{
        if(index+1 != arr.length){
          let temp0 = JSON.parse(JSON.stringify(arr[index]))
          let temp1 = JSON.parse(JSON.stringify(arr[index+1])); 
          arr[index] = temp1;
          arr[index+1] = temp0;
        }else{
            console.log("无法下移了")
        }
      }
  }
/* 
    从数组下对象中找出某个属性名，Id或者是name所在的index值来
*/
function ArrayFindIndex(arr,item){
    let currenMajorName = item.remarks;
    return arr.findIndex(function(item) {
        let nowName = item.remarks
        return nowName === currenMajorName;
    })
}
/* 
    数组中，根据某个Id或者name属性，取出不包含这个子集的所有东西；
    过滤数组中相同的东西
    其中allSchoolInfo 是全集，typeArr是其中的一个子集；
*/
function checkAddSchool(allSchoolInfo, typeArr) {
    function filterAddSchool(item) {
      let itemName = item.remarks?item.name:item.remarks+item.name+''
      return !typeArr.some(function(i){
        let curName = i.remarks ? i.name : i.remarks+i.name+''
        return curName == itemName
      });
    }
    let newArr = allSchoolInfo.filter(filterAddSchool);
    return newArr;
}
/* 数组中删除操作 */
function spliceArray(arr,index){
    return arr.splice(index,1)
}
/* 操作数组的高阶函数
    map forEach filter reduce
*/

/* 
过滤函数
 */
function filterArr(){
    return arr.filter(function(item){
        return true //返回到为true的字段；
    })
}

/* 
    给数组排序并且固定一个顺序
*/
function sortCompare(list){
  list = list.sort(compare)
  key = list.join("")
}
const subjectList = ['物理', '化学', '生物', '政治', '历史', '地理', '技术']
const compare = function (a, b) {
    return subjectList.indexOf(a) - subjectList.indexOf(b)
}

/* 
    filter中的链式调用
    filterSchoolData = schoolList
        .filter(filterLevel)
        .filter(filterSpecial)
        .filter(filterQuality)
        .filter(filterProvince)
        .filter(filterMajor)
        .filter(filterTags);
 */
/* 
  arr.fill：使用 value 值来填充 array，从start位置开始, 到end位置结束（但不包含end位置），返回原数组
  arr.fill() 是 ES6 的新方法。
    fill() 方法用于将一个固定值替换数组的元素。
 */
function arrfill(){
  let arr1 = [1, 2, 3, 4, 56, 7, 7, 8, 9];
  arr1.fill(4, 2, 5);
  console.log(arr1)  //   [1, 2, 4, 4, 4, 7, 7, 8, 9]
  let arr2 = [1, 2, 3, 4, 56, 7, 7, 8, 9];
  arr2.fill(4);
  console.log(arr2)  //  [4, 4, 4, 4, 4, 4, 4, 4, 4]
  let arr3 = []
  arr3.length = 5
  arr3.fill(3)
  console.log(arr3)
  let arr4 = Array(3).fill(4);
  console.log(arr4)
  let arr5 = Array(4).fill({obj:1})
  console.log(arr5)
}
//arrfill()

/* 
  Array.find()
   方法返回数组中满足提供的测试函数的第一个元素的值
*/
function arrayFind(){
  const array1 = [5, 12, 8, 130, 44]; 
  const found = array1.find(element => element > 10);
  console.log(found);
  const objArr = [
    {
      name:"张三",
      age:34
    },
    {
      name:"张三",
      age:50
    },
  ]
  let curObj = objArr.find(element => element.age>45)
  console.log(curObj)
}
//arrayFind()
/* 
  通过某个属性值去重
*/
function filterById(){
  let hash = {};
  const data2 = arr.reduce((preVal, curVal) => {
    //通过id过滤掉相同的值
    hash[curVal.id] ? "" : (hash[curVal.id] = true && preVal.push(curVal));
    return preVal;
  }, []);
  console.log(data2);
}

/* reduce的高级用法 */

function reduceFilter(){
  let arr = [1,3,4,5,6,7,5,4,3,2,1]
  let newArr = arr.reduce((pre,cur)=>{
    console.log(pre)
    console.log(cur)
    if(!pre.includes(cur)){
      return pre.concat(cur)
    }else{
      return pre
    }
  },[10])
  console.log(newArr)
}
//reduceFilter()
